
//3404.统计特殊子序列的数目
class Solution {
public:
    long long numberOfSubsequences(vector<int>& nums) {
        //对等式进行变形: nums[p]/nums[q]=nums[s]/nums[r]
        //枚举右侧的nums[s]/nums[r],将左边所有的 nums[p]/nums[q]进行统计

        int n=nums.size();
        unordered_map<double,int> m; //存储左边 nums[p]/nums[q]的值
        for(int i=0;i<3;i++)   //注意需要间隔一个字符存储
        {
            for(int j=i+2;j<3;j++)
            m[(double)nums[i]/nums[j]]++;
        }

        long long ret=0;
        for(int r=4;r<n-2;r++)
        {
            for(int s=r+2;s<n;s++)  //枚举s右边的数据作为r
            {
                double need=(double)nums[s]/nums[r];
                if(m.count(need)) ret+=m[need];
            }

            for(int p=r-1-2;p>=0;p--)   //将以r-1为分母的商添加到哈希表中
            m[(double)nums[p]/nums[r-1]]++;
        }
        return ret;
    }
};